Što je PDO?

PDO je akronim za PHP Data Object i predstavlja ekstenziju koja služi za lak i jednostavan pristup relacijskim bazama podataka. Dakle, PDO je sučelje za pristup bazama u PHP-u, uglavnom na objektno orijentiran način, zbog čega dopušta programerima da kreiraju kodove koji su prijenosni za mnoge baze podataka i platforme. S obzirom na to da je objektno orijentiran, moguće ga je naslijediti i implementirati naprednije metode. Podržava više različitih poslužitelja, a izmjene prilikom prelaska na drugi poslužitelj su minimalne.

Jednostavnije rečeno, PDO predstavlja vezu između baze i PHP-a te koristi DSN (Database Source Name) putanju. S druge strane, PDOStatement predstavlja upit koji je spreman za izvođenje, a nakon izvođenja sadrži rezultat upita.

Postoji nekoliko važnih PDO metoda:

lastInsertId() - vraća zadnji ubačeni ID

prepare($sql) - vraća instancu PDOStatement za zadani upit

quote($podatak) - priprema podatak za korištenje u SQL upitu

exec($sql) - izvodi upit i vraća broj redaka na koje je upit utjecao

setAttribute($atribut, $vrijednost) - mijenja postavke

Spajanje na MySQL

Za spajanje na MySQL koristi se sljedeći DSN: mysql:dbname=imebaze

Slika 1. - Primjer spajanja na bazu „mojabaza“

Vrlo je važno postaviti UTF-8 kao set znakova pri vezi s bazom:

Slika 2. - Pretpostavljeni set znakova je latin1

Slika 3. - Alternativni način (prilikom samog spajanja na bazu)

Upiti

Upite je moguće postaviti na nekoliko načina:

Metodom exec($sql) - samo za insert, update i delete; vraća broj redova na koje je upit utjecao

Metodom query($sql) - vraća instancu PDOStatement; pogodno za upite bez parametara

Instancom PDOStatement dobivene metodom prepare($sql) – vrlo jednostavno korištenje; „definiraj jednom, koristi svugdje“

PDOStatement

PDOStatement se instancira pozivom na metodu PDO::prepare() i radi s rezerviranim mjestima (eng. placeholders). Imenovani placeholderi definiraju se s :naziv, a neimenovani s ? .

Slika 4. - Primjer

Upit je moguće izvršiti koliko god puta odlučite, s različitim parametrima.

Slika 5. - Primjer

Ukoliko imamo rezervirana mjesta, samim time imamo i automatsku zaštitu od SQL napada. Uz pomoć rowCount() možemo saznati broj redaka na koje je upit utjecao, dakle, za delete, update i insert, vraća se broj redaka na koje je upit utjecao, a za select neki upravitelji bazama podataka vraćaju broj rezultata, no to nije preporučljivo zbog prenosivosti, puno bolji način od toga je SELECT COUNT(*).

Povezivanje parametara

Povezivanjem parametara bitno se olakšava postavljanje upita, primjerice, ako je$stupac ime ili redni broj rezerviranog mjesta, bindValue($stupac, $varijabla) pridodaje rezerviranom mjestu vrijednost varijable i koristi se prije izvršavanja upita. S druge strane, bindParam($stupac, &$varijabla) pridodaje rezerviranom mjestu varijablu i također se koristi prije izvršavanja upita. Valja napomenuti da se rezervna mjesta broje od broja 1.

Slika 6. - Primjer bindValue

Slika 7. - Primjer bindParam

Povezivanje stupaca

Povezivanje stupaca olakšava dohvaćanje rezultata, ako uzmemo u obzir da je $stupac ime stupca ili 1-indeks (1-indeksi se broje od 1, a ne od 0), tada bindColumn($stupac, $varijabla) pridodaje varijabli vrijednost iz stupca, koristi se pri iteriranju kroz rezultate i potreban je PDO::FETCH_BOUND kao način dohvaćanja.

Šetnja kroz rezultate

PDOStatement implementira sučelje Traversable, a lagano šetanje moguće je koristeći foreach: $upit->execute(); foreach ($upit as $red) {...}

Tip varijable $red ovisi o načinu dohvaćanja, a određuje se pomoću metode PDOStatement::setFetchMode($mode). Također, preporučuje se i korištenje PDO::FETCH_NAMED, dok se pretpostavlja korištenje PDO::FETCH_BOTH.

Slika 8. - Primjer FETCH_OBJ

fetch() – vraća sljedeći red u rezultatu

fetchAll() – vraća polje sa svim rezultatima

fetchColumn($stupac) – vraća sadržaj polja u zadanom stupcu sljedećeg retka $ime = $upit->fetchColumn('ime');

Slika 9. - Primjer fetch

Slika 10. - Primjer fetchAll

Literatura

Osnove izrade PHP aplikacija

URL: http://php.fer.hr/predavanja/13_pdo.html#/1

Osnove izrade PHP aplikacija PDO

URL: https://www.fer.unizg.hr/_download/repository/7._PDO%5B1%5D.pdf

Tematika Creative Web Studio: predstavljamo Vam PDO

URL: http://tematikawebstudio.com/blog/2015/08/31/sta-je-pdo/

Uvod u MySQL i PDO

URL: http://www.balkan-smf.com/forum/index.php?topic=8700.0